

class Alg<T>{
    //我们想要在这个类中存储 任意类型的数据: 先定义一个 Object 的对象
    public Object[] objects=new Object[10];
    /*
    * T[] t=new T[10];
    *  这种定义形式是不被允许的，在编译时虽然会 使用擦除机制，暂时将 T 看出 Object 类型的
    *  但在后面是不被允许的 ，编译时就会确定其类型
    * */


    public T getValue(int pos){
        // 强制类型转化
         return (T)objects[pos];
    }

    // 写成 泛型 ，编译器会自动帮你把T 类型转变成你 输入的类型
    public void setValue(int pos,T value){
        objects[pos]=value;
    }
}


public class Test1 {
    public static void main(String[] args) {
        //编译器编译时， 会帮我们进行类型的检查
        Alg<Integer> alg=new Alg<>();
        Alg<String> alg2=new Alg<>();
    }





    public static void main01(String[] args) {

        Alg alg=new Alg();
        alg.setValue(0,"haha");
        alg.setValue(1,100);
        alg.setValue(2,'A');

        System.out.println(alg.getValue(0));
        System.out.println(alg.getValue(1));
        System.out.println(alg.getValue(2));


    }
}
